As we mentioned earlier, the bslib package provides a modern UI toolkit for Shiny, R Markdown, and Quarto based on Bootstrap. It provides,
Custom theming of Shiny apps and R Markdown documents
Switch between different versions of Bootstrap
Modern UI components like cards, value boxes, sidebars, and more.
We will now take a look at the first two of these features.
Bootswatch
Due to the ubiquity of Bootstrap a large amount of community effort has gone into developing custom themes - a large free collection of these are available at bootswatch.com/.
bs_theme()
Provides a high level interface to adjusting the theme for an entire Shiny app,
Change bootstrap version via version argument
Pick a bootswatch theme via bootswatch argument
Adjust basic color palette (bg, fg, primary, secondary, etc.)
Simplified theming of ggplot2, lattice, and {base} R graphics. In addition to providing a centralized approach to styling R graphics, thematic also enables automatic styling of R plots in Shiny, R Markdown, and RStudio.
In the case of our Shiny app, to get dynamic theming of our plot as well as our UI all we need to do is to include a call to thematic_shiny() before the app is loaded.
Using code provided in exercises/ex06.R (which is the same as demo09) experiment with bslib’s themer tool to explore different themes .
Try changing the main theme as well as the foreground and background colors
Try changing one or more of the accent colors
Try the fonts being used (e.g. Prompt, roboto, Oswald, Fira Sans) and changing the base font size
Based on the output in your console, update the bs_theme() call in the script to reflect the changes you made
10:00
Deploying Shiny apps
Your turn - Exercise 07 - Part 1
Go to shinyapps.io and sign up for an account if you don’t have one already.
You can create a new account via email & a password
or via authorisation through Google or GitHub.
If asked to pick a plan, use the Free option (more than sufficient for our needs here)
Once you have an account, you will need to install the rsconnect package and authenticate your account (just follow and complete step 1 and 2).
03:00
Organising your app
For deployment generally apps will be organised as a single folder that contains all the necessary components (R script, data files, other static content).
Pay attention to the nature of any paths used in your code
Absolute paths are almost certainly going to break
Relative paths should be to the root of the app folder
Static files (e.g. css, js, etc.) generally are placed in the www/ subfolder
Your script does not need to be named app.R or ui.R/server.R
Check / think about package dependencies
Your turn - Exercise 07 - Part 2
Now we will publish our app to shinyapps.io (you will need to have completed Exercise 7 - Part 1)
Package up ex07.R as an app in exercises/ex07app (you will need to create this folder)
Make sure to copy the data (weather.csv) into this folder
and adjust any paths if necessary
The easiest way to deploy your app is with RStudio’s Publish App button, right next to the Run App button. Open the script file in exercises/ex07app and click the Publish button in the upper right of the pane
Your Shiny app should now be deploying and should open on shinyapps.io once live - check to see if everything works, if not go back and check Steps 1 and 2.
Once you have successfully deployed your app, share the links with your neighbour(s) and see if you can run their deployed app.
10:00
Demo 10 - shinylive
One of the really exciting developments in the last couple of years is the ability to run R (and Python) inside a web browser using webasm. shinylive is a package that lets you bundle your shiny app as a static website that can be hosted anywhere you can host static html.
The R package DT provides an R interface to the JavaScript library DataTables. R data objects (matrices or data frames) can be displayed as tables on HTML pages, and DataTables provides filtering, pagination, sorting, and many other features in the tables.
The goal of the pool package is to abstract away the logic of connection management and the performance cost of fetching a new connection from a remote database. These concerns are especially prominent in interactive contexts, like Shiny apps (which connect to a remote database) or even at the R console.